Queues are waiting lines for items to be serviced. Forming queues in the real world (e.g., standing in line at a bank) is a simple matter. However, forming queues in the world of computers is a more complex matter.
Numerous issues must be addressed in the typical computer queue. The entry of items (writing to the queue) must be carefully monitored to prevent overflowing the capacity of the computer queue. The removal of items (reading from the queue) must be carefully monitored to prevent removing non-existent, invalid or out-of-date items (a condition known as "underflow"). Furthermore, the location of each item's position in the queue must be tracked or addressed. Tracking each item's position in the queue tells where to place the next item to be added to the queue or where to remove the next available item from the queue. Stated differently, the head (where the next available item in the queue is to be removed) or the tail (where the next item to be added is to be placed in the queue) of the queue must be addressed every time an item is added to or removed from the queue.
In the typical computer queue, specialized hardware and/or software handles the overflow, underflow and addressing issues explained above. In contrast, the present invention reduces the overhead commonly associated with computer queues by not requiring direct addressing of each location in the queue and by not requiring specialized underflow logic. Furthermore, with the computer queue of the present invention, reads and writes to the queue can be asynchronous. Lastly, the computer queue of the present invention requires less circuitry and is thus physically smaller, requires less power to operate and can operate more quickly.